package com.ysd.lis.service.qi.impl;


import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.ysd.common.Result;
import com.ysd.lis.entity.lab.LabFeeItem;
import com.ysd.lis.entity.qi.QiIndexFeeitemSign;
import com.ysd.lis.mapper.lab.LabFeeItemMapper;
import com.ysd.lis.mapper.qi.QiIndexFeeitemSignMapper;
import com.ysd.lis.request.FeeItemPageParam;
import com.ysd.lis.request.qi.FeeitemSignDto;
import com.ysd.lis.service.qi.QiIndexFeeitemSignService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * 收费项目标志 服务实现类
 * </p>
 *
 * @author WH
 * @since 2024-07-26
 */
@Service
public class QiIndexFeeitemSignServiceImpl extends ServiceImpl<QiIndexFeeitemSignMapper, QiIndexFeeitemSign> implements QiIndexFeeitemSignService {

    @Autowired
    private LabFeeItemMapper labFeeItemMapper;

    @Autowired
    private QiIndexFeeitemSignMapper qiIndexFeeitemSignMapper;

    @Override
    public Result findLabApplyItemList(FeeItemPageParam feeItemPageParam) {

        MPJLambdaWrapper<LabFeeItem> lambdaQueryWrapper = new MPJLambdaWrapper<>();
        lambdaQueryWrapper.selectAll(LabFeeItem.class);

        lambdaQueryWrapper.eq(StrUtil.isNotEmpty(feeItemPageParam.getOrgId()), LabFeeItem::getOrgId, feeItemPageParam.getOrgId()).eq(LabFeeItem::getDelFlag, 0);
        if (StrUtil.isNotEmpty(feeItemPageParam.getKeyWords())) {
            lambdaQueryWrapper.and(wrapper ->
                    wrapper.like(LabFeeItem::getFeeCode, feeItemPageParam.getKeyWords())
                            .or()
                            .like(LabFeeItem::getFeeName, feeItemPageParam.getKeyWords())
                            .or()
                            .like(LabFeeItem::getInputCode, feeItemPageParam.getKeyWords())
            );
        }
        List<LabFeeItem> labFeeItems = labFeeItemMapper.selectList(lambdaQueryWrapper);
        // 将List<LabFeeItem>转换为List<Map<String, Object>>
        List<Map<String, Object>> labFeeItemsAsMaps = labFeeItems.stream()
                .map(item -> {
                    Map<String, Object> map = new HashMap<>();
                    map.put("feeCode", item.getFeeCode());
                    map.put("feeName", item.getFeeName());
                    return map;
                })
                .collect(Collectors.toList());
        List<QiIndexFeeitemSign> qiIndexFeeitemSigns = qiIndexFeeitemSignMapper.selectList(new LambdaQueryWrapper<QiIndexFeeitemSign>().eq(QiIndexFeeitemSign::getDelFlag, 0));
        if (CollectionUtils.isNotEmpty(qiIndexFeeitemSigns)) {
            for (Map<String, Object> labFeeItemsAsMap : labFeeItemsAsMaps) {
                List<QiIndexFeeitemSign> feeCode = qiIndexFeeitemSigns.stream().filter(item -> item.getFeeCode().equals(labFeeItemsAsMap.get("feeCode"))).collect(Collectors.toList());
                if (CollectionUtils.isNotEmpty(feeCode)) {
                    for (QiIndexFeeitemSign qiIndexFeeitemSign : feeCode) {
                        labFeeItemsAsMap.put(qiIndexFeeitemSign.getDictCode(), qiIndexFeeitemSign.getDictValue());
                    }
                }
            }
        }
        return Result.succ(labFeeItemsAsMaps);
    }

    @Override
    public Result updateFeeitemSign(FeeitemSignDto feeitemSignDto) {
        LambdaQueryWrapper<QiIndexFeeitemSign> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(QiIndexFeeitemSign::getFeeCode, feeitemSignDto.getFeeCode());
        queryWrapper.eq(QiIndexFeeitemSign::getDictCode, feeitemSignDto.getDictCode());
        queryWrapper.eq(QiIndexFeeitemSign::getOrgId, feeitemSignDto.getOrgId());
        qiIndexFeeitemSignMapper.delete(queryWrapper);
        QiIndexFeeitemSign qiIndexFeeitemSign = new QiIndexFeeitemSign();
        BeanUtil.copyProperties(feeitemSignDto, qiIndexFeeitemSign);
        if (("chekbox".equals(feeitemSignDto.getType()) && !"0".equals(feeitemSignDto.getDictValue())) || ("input".equals(feeitemSignDto.getType()) && StringUtils.isNotBlank(feeitemSignDto.getDictValue()))) {
            qiIndexFeeitemSignMapper.insert(qiIndexFeeitemSign);
        }
        return Result.succ("操作成功!");
    }
}
